'use strict';

const { Products, Op } = require('../model');

let products = [
    {
        id: 1,
        name: 'OL装 上装',
        price: 588,
        stock: 10,
        supplier: 'UR'
    },

    {
        id: 2,
        name: 'OL装 下装',
        price: 699,
        stock: 5,
        supplier: 'UR'
    },
    {
        id: 3,
        name: '泳装',
        price: 299,
        stock: 100,
        supplier: '维多利亚的秘密'
    },
    {
        id: 4,
        name: '唐装',
        price: 1999,
        stock: 2,
        supplier: '曹县'
    },
    {
        id: 5,
        name: '童装',
        price: 199,
        stock: 50,
        supplier: '好孩子'
    },

]

// 商品的数据列表，可能存在关键字查找的情况
let fn_product_list = async (ctx, next) => {
    let keyword = ctx.request.query.keyword || '';
    // console.log(keyword);
    // keyword存在的时候，进行过滤查找，不存在的时候，直接返回所有的商品数据
    if (keyword) {
        let list = await Products.findAll({
            where: {
                [Op.or]: [
                    { id: isNaN(keyword) ? 0 : parseInt(keyword) },
                    { name: keyword },
                    { price: isNaN(keyword) ? 0 : keyword },
                    { stock: isNaN(keyword) ? 0 : parseInt(keyword) },
                    { supplier: keyword },
                ]
            },
            order:['id']
        })
        ctx.body = list;
        // ctx.body = products.filter(item => {
        //     return item.id == keyword || item.name == keyword ||
        //         item.price == keyword || item.stock == keyword || item.supplier == keyword;
        // })
    } else {
        let list = await Products.findAll({
            order:['id']
        });
        console.log(list);
        ctx.body = list;
    }

}

let fn_product_id = async (ctx, next) => {
    let id = ctx.request.params.id;
    let arr = await Products.findByPk(id);
    if (arr) {
        ctx.body = {
            code: 1000,
            data: arr,
            msg: '获取成功'
        }
    } else {
        ctx.body = {
            code: 400,
            data: null,
            msg: '没有找到'
        }
    }
}

let fn_post = (ctx, next) => {
    /*
    从前端请求post过来的数据，稍微处理，push到products数组
    1、从请求拿到传递过来的数据
    2、处理拿到的数据（传递过来的数据，有可能为空，有可能属性名称和原products数组中的元素的属性不一致或者不完全一致）
    3、push到数组
    4、响应前端请求

    */
    let obj = ctx.request.body;
    console.log(obj);// ?现在还不清楚传过来的数据是怎么样的，所以暂时先打印，待处理
    if (obj.hasOwnProperty('name') && obj.hasOwnProperty('price') && obj.hasOwnProperty('stock') && obj.hasOwnProperty('supplier') &&
        obj.name && obj.price && obj.stock && obj.supplier) {
        let tmpObj = {
            name: obj.name,
            price: obj.price,
            stock: obj.stock,
            supplier: obj.supplier
        };
        Products.create(tmpObj)

        ctx.body = {
            code: 1000,
            data: tmpObj,
            msg: '新增成功'
        }
    } else {
        ctx.body = {
            code: 400,
            data: null,
            msg: '数据验证不成功，请确认后重试'
        }
    }
}
let fn_put = async (ctx, next) => {
    /*
    先使用id查找到对应的记录（这里是商品数组对应的元素）,拿到put请求传过来的需要修改的数据
    可能需要对传过来的数据进行验证
    记录存在：才能继续修改
    记录不存在：则返回要修改的记录或者元素不存在的提示信息
    */
    let id = ctx.request.params.id;
    let obj = ctx.request.body;
    console.log(obj);
    let product = await Products.findByPk(id);

    // 根据id找到了记录或者元素
    console.log(product);
    if (product) {
        // 根据实际情况，考虑id重复的问题，考虑会不会对业务造成任何影响，由这里是练习作品，所以暂不考虑id重复的问题

        await Products.update(obj, {
            where: {
                id: id
            }
        });
        ctx.body = {
            code: 1000,
            data: product,
            msg: '修改成功！'
        }

    } else {//反之就是没找到
        ctx.body = {
            code: 400,
            data: null,
            msg: '指定修改的记录或者元素不存在，请确认后重试'
        }

    }
}

let fn_delete =async (ctx, next) => {
    let id = ctx.request.params.id;
    // 删除数组中指定id值的元素
    let product = await Products.findByPk(id);
    // let arr = products.filter(item => {
    //     return item.id != id;
    // })
    if (product) {
       await Products.destroy({
            where:{
                id:id
            }
        })
        // products = arr;
        // console.log(products);
        ctx.body = {
            code: 1000,
            data: { id: id },
            msg: '删除指定记录成功'
        }
    } else {
        ctx.body = {
            code: 400,
            data: '',
            msg: '你指定删除的记录不存在，请确认后重试'
        }
    }
}

module.exports = {
    'get /product': fn_product_list,// 用于产品列表页面，返回列表信息
    'get /product/:id': fn_product_id, // 用于产品详情页面，返回的是某个指定id的产品的详细信息
    'post /product': fn_post, // 用于产品新增，增加一条产品数据
    'put /product/:id': fn_put, //用于产品修改，修改指定id的产品数据
    'delete /product/:id': fn_delete // 用于删除指定id的产品信息
}